# ДЗ

Требуется реализовать методы в `BinarySearchTree.cs`, и проверить их тестами `BinarySearchTreeTest.cs`

*Запуск тестов:* 
**Visual Studio**
Откройте обозреватель тестов, выбрав Тест > Обозреватель тестов в верхней строке меню (или нажмите клавиши CTRL + E, T).
Запустите модульные тесты, нажав Запустить все (или нажмите клавиши CTRL + R, V).

## 1. Обработка чеков

★★★☆☆

Компания по грузоперевозкам генерирует огромное количество чеков каждый день - оплата горючего, ремонтов, проезда по
платным дорогам. Компании необходимо реализовать возможность быстрого поиска по ним, поэтому ИТ отдел принял решение
использовать бинарное дерево поиска. Перед вами поставили задачу:
В классе `BinarySearchTree.cs` реализовать метод

```C#
public static Node FromList(List<Receipt> elements) 
```

Метод должен вернуть ссылку на корень дерева. На вход же ему поступает коллекция чеков. В каждом чеке указан его номер,
по которому необходимо сортировать и сумма. Классы Node и Receipt для вас уже подготовил техотдел.
*Внимание!* Чеки приходят не в отсортированном порядке.

## 2. Выгрузить все чеки за день

★★★☆☆

Ваш босс так же захотел иметь возможность получить список всех чеков за определенный день. Теперь перед вами стоит
задача развернуть в список, имея ссылку на корень бинарного дерева поиска. Реализуйте метод:

```C#
public static List<Receipt> FromNode(Node root)
```

*Совет:*
Для сравнения строк пользуйтесь методом string.Compare()

## 3. Быстрый поиск чека

★★★☆☆

Следующей задачей, которую вам необходимо выполнить - поиск нужного чека в дереве. Вам необходимо найти чек по номеру, и
вернуть сумму, которая в нем указана. Для этого реализуйте метод:

```C#
public static double GetAmount(Node root, int receiptNumber)
```

## 4. Проблема с базой данных

★★★☆☆

В ходе работы программы, пользователи заметили, что иногда из-за ошибок сервера, в программу загружаются "битые" чеки и
дерево теряет свое основное свойство - значение номера чека в родителе меньше чем в потомках. Реализуйте метод проверки,
который проверял бы действительно ли дерево загрузилось правильно. Для этого реализуйте метод:

```C#
public static boolean CheckTree(Node root)
```

## 5. Удаляем неверные чеки

★★★☆☆

Часто чеки загружают с неверными данными. И такие чеки надо удалять из дерева. Для этого реализуйте 
метод, который будет удалять переданный чек:

```C#
public static void Delete(Node root, Receipt receipt)
```

## 6. Следующий чек

★★★☆☆

Для улучшения отображения в бухгалтерской программе, техотдел предложил выгружать следующий чек, после отображаемого.
Для этого реализуйте метод, который бы возвращал следующий чек после чека receipt, если его нет вернуть null:

```C#
public static Receipt GetNext(Node root, Receipt receipt)
```
